home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Very Best of Atari Inside
/
The Very Best of Atari Inside 1.iso
/
mint
/
mntlib43
/
mntlib
/
rename.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-26
|
957b
|
51 lines
/* a public domain rename, by ERS */
#include <limits.h>
#include <errno.h>
#include <osbind.h>
#include <string.h>
#include <unistd.h>
#include <stat.h>
#include <mintbind.h>
#include "lib.h"
extern int __mint;
int rename(_oldname, _newname)
const char *_oldname, *_newname;
{
char oldname[PATH_MAX], newname[PATH_MAX];
int rval;
struct stat oldstat;
struct stat newstat;
_unx2dos(_oldname, oldname);
_unx2dos(_newname, newname);
if (__mint
&& (Fxattr(1, newname, &newstat) == 0)
&& (Fxattr(1, oldname, &oldstat) == 0)
&& (newstat.st_dev == oldstat.st_dev)
&& (newstat.st_ino == oldstat.st_ino))
{
/* rename("foo", "./foo"); */
errno = EEXIST;
return -1;
}
rval = Frename(0, oldname, newname);
if (rval == 0)
return 0;
if (rval != -EXDEV && rval != -ENOENT)
{
(void) Fdelete (newname);
rval = Frename(0, oldname, newname);
}
if (rval < 0) {
errno = -rval;
rval = -1;
}
return rval;
}